<?php
namespace app\adminapi;

use think\db\exception\DataNotFoundException;
use think\db\exception\ModelNotFoundException;
use think\exception\Handle;
use think\exception\HttpException;
use think\exception\HttpResponseException;
use think\exception\ValidateException;
use think\Response;
use Throwable;

/**
 * 应用异常处理类
 */
class ExceptionHandle extends Handle
{
    /**
     * 不需要记录信息（日志）的异常类列表
     * @var array
     */
    protected $ignoreReport = [
        HttpException::class,
        HttpResponseException::class,
        ModelNotFoundException::class,
        DataNotFoundException::class,
        ValidateException::class,
    ];
    protected $errorCode = 500;# 默认状态码
    protected $errorMsg = '服务异常';# 默认异常信息

    /**
     * 记录异常信息（包括日志或者其它方式记录）
     *
     * @access public
     * @param  Throwable $exception
     * @return void
     */
    public function report(Throwable $exception): void
    {
        // 使用内置的方式记录异常日志
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @access public
     * @param \think\Request   $request
     * @param Throwable $e
     * @return Response
     */
    public function render($request, Throwable $e): Response
    {
        // 添加自定义异常处理机制
        //在adminapi应用配置、捕获异常 最后一道保障
//        $error_code = $e->getCode();# 获取错误状态码
//        $error_code = $error_code!=0 ? $error_code : $this->errorCode; # 如果没有状态码、或者状态码是0 给他一个默认的状态
        # 如果开启debug
        if (env('APP_DEBUG') == true) {
            // 其他错误交给系统处理
            return parent::render($request, $e);
        } else {
            return fail($e->getCode() ?: $this->errorCode,$e->getMessage() ?: $this->errorMsg);
        }

    }
}
